#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "insere.h"

void inserir(char argv[])
{
		FILE *f,*f2;
    	if((f=fopen("fic.txt","r+"))==NULL){ //abrir ficheiros
            printf("Ficheiro nao existe\n");
             exit(2);
        }
        if((f2=fopen("tab.txt","r+"))==NULL){
              printf("Ficheiro nao existe\n");
              exit(2);
         }
          

        int escrita;
        int lei;

        cria_semaforo(escrita,1);//criar semaferos
        cria_semaforo(lei,20);

        int nml=qualel(argv[1]); //qual e a linha da tab
	char Nome[20];
	int quant,i,e,v;
        long nlmed,nlmed2,linha;


        P(escrita);    //reservar semaferos
        for(i=0;i<20;i++) P(lei);


        for(i=0;i<=nml;i++) fscanf(f2,"%lu",&nlmed); //avancar para a linha da tab
	fscanf(f2,"%lu",&nlmed2);
	linha=nlmed*28;
	fseek(f,linha, SEEK_SET); //saltar para a linha do ficheiro
		
	fscanf(f,"%s%d%d",Nome,&quant,&v);
	e=eigual(Nome, argv[1]);
	
	while(e==1&&nlmed<nlmed2) //procura sequencial do medicamento
            {fscanf(f,"%s%d%d",Nome,&quant,&v);
             e=eigual(Nome, argv[1]);
             nlmed++;}

        if(e==0) { //se o med ja existe, nao insere
            printf("Ja existe\n");
            }
        else(insere(argv[1], argv[2],nlmed, nml)); //se existe insere


            for(i=0;i<20;i++) V(lei); //desmarcar semaferos
            V(escrita);

    }

void insere(char Nome[], char quant[], int nml, int nml2){
char buf[300];

FILE *f;
char b[10]="fic.txt\0";
char b2[12]="temp1.txt\0";
char b3[12]="temp2.txt\0";
int c=strlen(Nome)+tamn(atoi(quant));


if((f=fopen("temp1.txt","a+"))==NULL){
    printf("Ficheiro nao existe\n");
    exit(2);
}


    int p;
    int i=25-c;
    char u[i];//criar array de espaços a inserir
    for(p=0;p<i;p++) u[p]=' ';
    u[p]='\0';

    //copia toda a informação antes e depois da linha a inserir para um novo ficheiro
    if(nml!=0) sprintf(buf,"head -n %d /tmp/proj/%s > /tmp/proj/%s", nml, b, b2);
    else sprintf(buf," > %s",b2);
    system(buf);
    sprintf(buf,"tail +%d /tmp/proj/%s > /tmp/proj/%s ",nml+1,b,b3);
    system (buf);
 
    fprintf(f,"%s%s%d 0\n",Nome,u,atoi(quant)); //inserir nova linha
    fclose(f);
    sprintf(buf,"cat /tmp/proj/%s >> /tmp/proj/%s",b3,b2);
    system (buf); //enviar o resto para o ficheiro depois de inserido


    system ("rm /tmp/proj/temp2.txt"); //renomeia o ficheiro e eliminha o anterior
    tabref(nml2); //update da tabela de referencias
    system ("mv temp1.txt fic.txt");
}

void tabrefs(int nml) //update da tab de referencias
{FILE *f1, *f2;
int apont=0;
long ref;
system(" >temp2.txt");
f1=fopen("tab.txt","r");
f2=fopen("temp2.txt","a+");
while(fscanf(f1,"%lu",&ref)!=EOF)
{ if(apont>nml) ref=ref+1; //adiciona um valor a cada linha depois de nml
	fprintf(f2,"%lu\n", ref);
	apont++;
}

system ("mv temp2.txt tab.txt");
}


